벡터디비의 이해와 설계 — 딥다이브 학습 노트

채널: 뉴런데브 | 에피소드: 8개 | 대상: 7년차 Spring/Java 개발자 수준


학습 로드맵

EP1 정형/비정형 데이터 ──→ EP2 벡터화 기초 ──→ EP3 코사인 유사도
         │                        │                      │
         ▼                        ▼                      ▼
    데이터 본질 이해         Sparse vs Dense        L2 정규화 + 내적
         │                        │                      │
         └────────────────────────┼──────────────────────┘
                                  ▼
                        EP4 임베딩 평균의 가치
                                  │
              ┌───────────────────┼───────────────────┐
              ▼                   ▼                   ▼
      EP5 DB 선택          EP6 벡터 인덱스      EP7 실무 데이터
              │                   │                   │
              └───────────────────┼───────────────────┘
                                  ▼
                        EP8 임베딩 모델 진화

EP1. 정형 데이터와 비정형 데이터

핵심 요약

정형 데이터의 본질적 가치는 데이터 해석 엔트로피를 제거하는 것이다. 비정형 데이터는 해석 엔트로피가 높은 상태의 데이터이며, 정형/비정형은 이분법이 아니라 연속적인 스펙트럼이다.

딥다이브

데이터 해석 엔트로피

정형 데이터가 가치 있는 이유는 "누가 와도 동일하게 해석 가능"하기 때문이다. 스키마, 타입, 관계, 인덱스, 메타정보 등 여러 차원에서 사전 정의하여 해석의 여지를 제거한다.

해석 엔트로피 스펙트럼:

낮음 ◀━━━━━━━━━━━━━━━━━━━━━━━━━━━━▶ 높음
정규화된 RDB │ JSON(느슨한 스키마) │ 자유 텍스트
   ▲              ▲                    ▲
   │              │                    │
NULL 불허       필수키만 정의        구조 없음
FK 제약         검색 가능성만 보장   해석 무한대

핵심 통찰: NULL을 허용하는 순간 해석 엔트로피가 급등한다. 회원 이름이 NULL이면 — 이름이 없는 건지, 안 쓴 건지, 나중에 쓸 건지, 태명만 있는 건지 해석할 수 없다.

데이터 비용 체계

비용 유형 설명 비고
수집 비용 데이터를 모으는 비용 회원 1명 가입 ≈ 1,000원
해석 비용 데이터를 이해하는 비용 가장 크고, 나머지를 결정
가공 비용 사용 가능한 형태로 변환 해석이 되어야 가공 가능
사용 비용 실제 활용하는 비용 -
피드백 비용 결과를 반영하는 비용 -

NoSQL의 본질: 느슨한 스키마

NoSQL은 "스키마가 없다"가 아니라 데이터 구조 스키마와 검색 가능성 스키마의 분리를 발견한 것이다.

// MongoDB: 데이터 구조는 자유, 검색 가능성은 최소 정의
{
  "name": "필수",        // 검색 가능성 스키마 (필수키)
  "email": "필수",
  "extra": { ... }       // 자유 구조 (데이터 스키마는 느슨)
}

비정형 데이터의 비즈니스 가치

기업 핵심 비정형 데이터 비즈니스 가치
구글 검색 키워드 광고 타겟팅
페이스북 타임라인 포스트 소셜 그래프
OpenAI Reddit 텍스트 LLM 학습
네이버 실시간 검색어 트렌드 분석

벡터화 방법론 도입

비정형 데이터를 다차원 숫자 벡터로 표현하여 의미를 부여한다. 하나의 데이터("사과")에 다층적/다중적 의미(과일 vs 회사)를 여러 차원의 숫자로 표현한다. 역전파/그래디언트로 벡터 수치를 자동 산출하며, GPU 발전 이후 본격적으로 각광받기 시작했다.

실무 체크포인트

  • [ ] RDB 설계 시 NULL 허용 여부를 해석 엔트로피 관점에서 재검토하고 있는가?
  • [ ] MongoDB 사용 시 필수 키(검색 가능성 스키마)를 명시적으로 정의했는가?

EP2. 비정형 데이터를 벡터로 바꾸기

핵심 요약

벡터화의 두 가지 방식 — 희소 벡터(Sparse)밀집 벡터(Dense). Dense 벡터는 신경망으로만 생성 가능하며, 하나의 의미가 여러 차원에 분산 표현된다.

딥다이브

통계적 벡터화 vs 신경망 벡터화

구분 통계적 벡터화 신경망 벡터화
대표 기법 Word2Vec, TF-IDF Transformer 임베딩
벡터 종류 주로 Sparse Dense
의미 표현 이산 군집의 통계적 분포 다차원 분산 표현
멀티모달 불가 가능 (텍스트, 이미지, 코드 등)
현재 위치 LLM 토큰 임베딩의 기초 주류

Sparse vs Dense 벡터

Sparse 벡터 (희소):
[0, 0, 3.2, 0, 0, 0, 1.5, 0, 0, 0]  ← 일부 차원만 사용
 │  특성: 차원이 독립적, 개별 차원이 특정 의미를 가짐
 │  예시: BM25, TF-IDF, 풀텍스트 인덱싱
 └─ 비유: 바둑판에 돌이 몇 개만 올라가 있는 상태

Dense 벡터 (밀집):
[0.23, -0.15, 0.87, 0.44, -0.62, 0.31, ...]  ← 모든 차원 사용
 │  특성: 차원 간 상호작용, 개별 차원에 독립적 의미 없음
 │  생성: 신경망(편미분/그래디언트/손실함수)으로만 가능
 └─ 비유: 금속 큐브 — 분자 밀도가 높아서 단단함

MoE와 Dense/Sparse 모델

구분 Dense 모델 MoE (Sparse 모델)
FFN 처리 모든 차원에 FFN 적용 일부 차원만 전문가가 처리
GPU 사용 균일 활성 전문가만 사용
대표 모델 GPT-4, Claude Mixtral, GPT-4 계열 일부

멀티모달 임베딩 시대

"텍스트끼리만 임베딩해서 RAG"은 2022년 사고방식이다. 현재는 멀티모달 임베딩이 주류다.

모델 모달리티 용도
Jina CLIP v3 VL 텍스트 + 이미지 멀티모달 검색
Jina Code Embedding 코드 + 자연어 코드 검색
의학 전용 모델 의학 텍스트 도메인 특화 검색

실무 체크포인트

  • [ ] BM25(Sparse)와 임베딩(Dense)의 차이를 이해하고 하이브리드 전략을 수립했는가?
  • [ ] 프로젝트에서 텍스트 외 모달리티(이미지, 코드 등)의 임베딩 필요성을 검토했는가?

EP3. 임베딩 모델과 코사인 유사도

핵심 요약

코사인 유사도는 두 벡터 간 각도의 유사성을 측정한다. L2 정규화된 벡터에서는 내적 = 코사인 유사도가 되어 연산이 극도로 단순해진다. 임베딩 모델은 앵커-포지티브-네거티브 트리플릿과 코사인 유사도 손실 함수로 학습한다.

딥다이브

L2 노름과 정규화

L2 노름 (벡터 크기):
  ‖v‖ = √(v₁² + v₂² + ... + vₙ²)    ← 피타고라스 정리의 n차원 확장

L2 정규화:
  v_norm = v / ‖v‖                    ← 각 원소를 노름으로 나눔
  결과: ‖v_norm‖ = 1                  ← 노름이 항상 1

증명: Σ(vᵢ/‖v‖)² = Σvᵢ²/‖v‖² = ‖v‖²/‖v‖² = 1

코사인 유사도 공식과 단순화

일반 공식:  cos(A, B) = (A · B) / (‖A‖ × ‖B‖)

정규화 후:  ‖A‖ = ‖B‖ = 1 이므로
            cos(A, B) = A · B  (내적 = 유사도)

구현: 루프 1번 — 같은 인덱스 원소끼리 곱해서 합산하면 끝

코사인 유사도 계산 예시: | 벡터 A | 벡터 B | 유사도 | 각도 | 해석 | |--------|--------|--------|------|------| | [0.6, 0.8] | [0.8, 0.6] | 0.96 | ~16° | 매우 유사 | | [0.6, 0.8] | [0.6, -0.8] | -0.28 | ~106° | 비유사 |

임베딩 모델 학습 원리

[앵커] "강아지가 공을 쫓는다"
   │
   ├── [포지티브] "개가 장난감을 따라간다"     → 유사도 높게 학습
   │
   └── [네거티브] "오늘 주식 시장이 폭락했다"  → 유사도 낮게 학습

손실 함수: 코사인 유사도 기반
역전파: 손실 결과에 따라 벡터값 조정
반복: 수억 건 데이터에 대해 → 시멘틱 벡터 완성

유사도 측정 방법 비교

방법 수식 데이터 편향 현재 위치
유클리드 거리 (L2) √Σ(aᵢ-bᵢ)² 취약 — 벡터 크기에 영향 인덱싱용으로만 사용
내적 (Dot Product) Σaᵢbᵢ 취약 — 크기 왜곡 가능 정규화 전제 시 사용
코사인 유사도 A·B / (‖A‖×‖B‖) 강건 — 각도 기반 업계 표준

코사인 유사도가 표준인 이유: 특정 분야(정치 등) 데이터가 많으면 해당 벡터 크기가 커져 유클리드/내적이 왜곡된다. 코사인 유사도는 각도만 비교하므로 이 문제가 없다.

실무 체크포인트

  • [ ] 벡터 DB에서 유사도 메트릭을 코사인 유사도로 설정했는가?
  • [ ] 임베딩 벡터가 L2 정규화되어 저장되는지 확인했는가?

EP4. 임베딩 평균의 가치

핵심 요약

여러 벡터의 산술 평균(Mean 벡터)은 수학적으로 유의미하다. 내적의 분배 법칙, 고차원 직교성, 국소적 선형성이 그 근거이며, 추천 시스템을 ML 없이 산술 연산만으로 구현할 수 있다.

딥다이브

Mean 벡터가 의미 있는 수학적 근거 3가지

(1) 내적의 분배 법칙 (가장 핵심)

dot(mean(a, b), q) = (dot(a, q) + dot(b, q)) / 2

→ a가 q와 유사하고 b도 q와 유사하면, mean(a,b)도 q와 유사
→ 내적(유사도)에 선형성이 성립

(2) 고차원 직교성 - 500~600차원 이상에서 임의의 두 벡터는 확률적으로 거의 직교 - 직교하는 벡터를 평균내면 고유한 방향(의미)이 생김 - 저차원(2D, 3D)에서의 직관과 다름 — 고차원일수록 잘 동작

(3) 국소적 선형성 - 지구는 둥글지만 운동장은 편편함 → 국소적으로 선형 근사 가능 - 다차원 벡터 공간도 마찬가지로 국소 영역에서 산술 평균 유효

Mean 벡터의 단점: 희석(Dilution)

좋아하는 것 A (유사도 +0.9)  ─┐
                               ├→ 평균 유사도 ≈ 0.3 (중립으로 희석)
싫어하는 것 B (유사도 -0.3)  ─┘

→ 상반된 속성이 평균으로 제거됨
→ 해결: 가중 평균, 클러스터링 후 개별 Mean 등

실용 예시: 산술 평균 기반 추천

1. 내가 구매한 5개 상품의 임베딩 벡터를 산술 평균
   mean_vec = (item1 + item2 + item3 + item4 + item5) / 5

2. mean_vec와 전체 상품 벡터의 코사인 유사도 계산

3. 유사도 높은 순으로 = 추천 상품
   → LLM 없이, ML 없이, 산술 연산만으로 추천 시스템 구현

벡터 연산 확장

연산 용도
평균 (Mean) 추천, 군집 대표
뺄셈/덧셈 벡터 산술 (King - Man + Woman = Queen)
Integrated Gradients XAI, 어트리뷰션
밀도 기반 이상 탐지 아웃라이어 검출
Attention 가중 평균 Transformer 내부

실무 체크포인트

  • [ ] 추천 시스템에서 복잡한 ML 모델 전에 Mean 벡터 베이스라인을 먼저 시도했는가?
  • [ ] Mean 벡터의 희석 문제를 인지하고 상반 속성을 분리하는 전략을 검토했는가?

EP5. 임베딩용 DB 선택

핵심 요약

벡터 DB 선택은 기존 DB 확장 vs 벡터 전용 DB의 두 갈래다. 기존 DB 확장은 하이브리드 검색이 강력하고, 전용 DB는 벡터 최적화와 GPU 활용이 장점이다.

딥다이브

기존 DB에 벡터 필드 추가

DB 유형 벡터 지원 비고
PostgreSQL pgvector 가장 활발한 생태계
Oracle Oracle Vector 엔터프라이즈 레거시 환경
MySQL 9.x MySQL Vector 9.x부터 지원
ElasticSearch Vector Plugin 기존 풀텍스트 + 벡터
Redis Redis Vector 초저지연
MongoDB Atlas Vector Search NoSQL + 벡터

기존 DB 확장 vs 벡터 전용 DB

구분 기존 DB 확장 벡터 전용 DB
대표 pgvector, Oracle Vector ChromaDB, Qdrant, Pinecone
장점 SQL JOIN + 벡터 검색 = 하이브리드, 기존 인프라 활용, BM25/풀텍스트 병행 벡터 검색 최적화, GPU 활용 가능, 대규모 벡터 처리
단점 자원 경합, CPU 기반이라 GPU 최적화 불가 메타데이터 필터링/BM25/본문 검색 부가 기능 부족
규모 한계 ~1억 벡터 수십억 벡터

⚠️ 최신 업데이트: 벡터 DB 벤치마크 (2026)

DB QPS (99% recall, 50M 벡터) 특징
pgvectorscale 471 QPS PostgreSQL 확장, p95 레이턴시 최저
Qdrant 41.47 QPS 오픈소스 전용 DB
Pinecone - 완전관리형, 수십억 벡터 지원
Milvus/Zilliz <10ms p50 대규모 벡터 처리

pgvectorscale이 Qdrant 대비 11.4배 높은 QPS를 기록했으나, 1억 벡터 이상에서는 전용 DB의 확장성이 유리하다.

하이브리드 검색의 필요성

"고양이가 장난감을 물어왔다" vs "개가 장난감을 물어왔다" — 벡터 유사도는 높지만 사용자는 불만족. 키워드 검색(BM25) 병행이 검색 품질을 높인다.

실무 전략:
1. SQL JOIN으로 데이터셋 축소 (메타데이터 필터링)
2. BM25 키워드 매칭
3. 벡터 유사도 검색
4. 결과 머지 → 리랭킹

실무 체크포인트

  • [ ] 기존 PostgreSQL/Oracle이 있다면 벡터 필드 추가를 먼저 검토했는가?
  • [ ] 벡터 전용 DB 도입 시 메타데이터 필터링과 BM25 대안을 확보했는가?
  • [ ] 검색 품질을 위해 하이브리드 전략(키워드 + 벡터)을 수립했는가?

EP6. 벡터DB에도 인덱스가 존재함

핵심 요약

밀집 벡터는 정렬이 불가능하므로 B+트리를 적용할 수 없다. 대신 HNSW(Hierarchical Navigable Small World) 가 벡터 인덱싱의 사실상 표준이다. IVF, PQ 등 보조 기법도 있지만 HNSW가 대세다.

딥다이브

B+트리가 벡터에 안 되는 이유

B+트리 전제: 데이터가 정렬 가능해야 함
  - 정수: 1 < 2 < 3 ✓
  - 문자열: "A" < "B" < "C" ✓
  - 밀집 벡터: [0.23, -0.15, 0.87] vs [0.44, 0.31, -0.62] → 정렬 불가 ✗

→ 코사인 유사도는 쌍별(pair-wise) 비교만 가능, 전체 순서화 불가
→ 유클리드 거리의 군집 분포가 코사인 유사도 군집과 어느 정도 유사한 성질을 활용

IVF (Inverted File Index)

100개 벡터 중 대표 벡터 10개 선정 (k-means 등)

쿼리 Q → 대표 벡터 10개와 비교 → 가장 유사한 그룹 선택 → 그룹 내 상세 검색

장점: 검색 범위를 1/10로 축소
단점: 대표 벡터 경계에 있는 벡터를 놓칠 수 있음

PQ (Product Quantization)

500차원 벡터 → 10~20차원으로 양자화(축소)

1차: 축소 벡터로 후보 추림 (빠르지만 부정확)
2차: 원본 벡터로 정밀 비교 (정확하지만 느림)

장점: 메모리 절약, 빠른 1차 필터링
단점: 양자화 손실로 recall 감소

NSW (Navigable Small World) 동작 원리

그래프 구축:
A(엔트런스) 등록 → B 등록(A와 연결) → C 등록 시:
  A까지 거리 = 15, B까지 거리 = 5
  → C는 B의 "친구"로 등록 (B가 A를 스크린)

탐색:
Q(쿼리) → A(엔트런스, 거리 20) 시작
  → A의 친구 B(거리 10), D(거리 22) 중 B 선택
  → B의 친구 C(거리 7), F(거리 12) 중 C 선택
  → C의 친구 중 더 가까운 게 없으면 C가 최종 결과

HNSW: NSW의 다계층 확장

Layer 3 (최상위): 노드 수 적음, 넓은 범위 탐색
    ↓ 가장 가까운 노드에서 하위 레이어로
Layer 2: 노드 수 중간
    ↓
Layer 1: 노드 수 많음
    ↓
Layer 0 (최하위): 모든 노드 포함, 정밀 탐색

→ 상위에서 대략적 위치 파악 → 하위에서 정밀 탐색
→ 로그 수준 탐색 복잡도 달성

⚠️ 최신 업데이트: GPU 가속 HNSW (2025-2026)

NVIDIA cuVS를 활용한 GPU 가속 HNSW 인덱싱이 등장했다: - 인덱싱 처리량 12배 향상 - Force-merge 레이턴시 7배 감소 - Elasticsearch가 cuvs-java를 통해 cuVS 통합

인덱스 한계 인식

HNSW 인덱스는 근사 최근접 이웃(ANN)이므로 코사인 유사도 최상위 결과가 빠질 수 있다. 데이터 특성에 따라 인덱스 성능이 달라지므로 반드시 벤치마크 평가가 필요하다.

실무 체크포인트

  • [ ] HNSW 파라미터(efConstruction, M)를 데이터 규모에 맞게 튜닝했는가?
  • [ ] 인덱스의 ANN 특성으로 인한 recall 손실을 측정했는가?
  • [ ] 벡터 스키마 설계 — 어떤 데이터를 어떤 테이블/컬렉션으로 분리할지 결정했는가?

EP7. 벡터 DB용 실무 데이터 특징

핵심 요약

벡터 DB 프로젝트의 핵심은 DB 자체가 아니라 비정형 데이터의 정제다. 청킹이 검색 품질의 80% 이상을 좌우하며, 메타데이터 보강과 보안 정책이 실무의 난관이다.

딥다이브

기업의 벡터 DB 타겟 데이터

정형 데이터 (RDB)          비정형 데이터 (벡터 DB 타겟)
━━━━━━━━━━━━━━━━         ━━━━━━━━━━━━━━━━━━━━━━━
회원, 주문, 결제           노션, 슬랙, 메신저 로그
재고, 배송                 PPT, PDF, 엑셀
계약, 인사                 공유 폴더 문서
                           회의록, 메모, 이메일
↑ 핵심 비즈니스 데이터      ↑ 사소하지만 방대한 데이터
↑ 일관된 보안/접근 정책     ↑ 권한 구조가 엉망

데이터 정제 파이프라인

[원본 데이터] → 변환/파싱 → 청킹 → 메타데이터 보강 → 스키마 설계 → 벡터 DB
                  │          │           │                │
                  ▼          ▼           ▼                ▼
            PDF→텍스트   의미 단위로   시간, 출처,      컬렉션 구조
            PPT→마크다운  레코드 분리  권한, 분류ID     테이블 분리
            엑셀→HTML    (80%+ 영향)  키워드 태그       세션별 분리

청킹이 80%를 좌우하는 이유

나쁜 청킹: 고정 길이로 자르기

"오늘 회의에서 프로젝트 A의 일정을 | 논의했습니다. 결론은 다음과 같습니다..."
                                    ↑ 의미가 잘림

좋은 청킹: 도메인 이해 기반

메신저 대화 → 같은 기사끼리, 같은 날짜끼리 묶기
PPT → 슬라이드 1장 = 1레코드? 3장 = 1레코드? → 도메인에 따라 판단
코드 → 함수/클래스 단위로 분리

메타데이터 보강

임베딩 유사도만으로는 부족하다. 정형적 필터링을 위한 메타데이터가 검색 품질을 결정한다.

메타데이터 용도 예시
시간 최신성 필터 2026-03-01
출처 신뢰도 판단 "인사팀 공식 문서"
권한/보안등급 접근 제어 "부서장 이상"
분류 ID 카테고리 필터 "휴가 정책"
키워드 하이브리드 검색 "연차, 반차, 대체휴일"
수집 방법 품질 평가 "API 수집" vs "크롤링"

데이터 정제 3단계 진화

단계 방식 예시
1단계 알고리즘 기반 정규식, 규칙 기반 파싱
2단계 AI 기반 PDF → Gemini/Grok에 던져서 파싱
3단계 에이전트 기반 데이터 구축 에이전트가 자동 정제

실무 팁: PDF 직접 파서를 만들지 말고 AI(Gemini, Grok 등)에 던져서 파싱하는 것이 훨씬 효율적이다. 엑셀도 GPT에 던져서 HTML로 변환하는 편이 낫다.

실무 체크포인트

  • [ ] 청킹 전략을 도메인에 맞게 설계했는가? (고정 길이가 아닌 의미 단위)
  • [ ] 메타데이터 스키마를 사전에 정의했는가? (시간, 출처, 권한, 분류ID, 키워드)
  • [ ] 비정형 데이터의 보안/접근 권한을 청크 수준에서 관리하고 있는가?

EP8. 임베딩용 모델에 대해

핵심 요약

임베딩 모델은 벡터 손실학습 → 인코더(BERT) → 디코더(LLM) 기반으로 진화했다. 하드 네거티브 마이닝, 인배치 네거티브로 학습 품질을 높이고, MRL(Matryoshka Representation Learning)로 벡터 차원을 유연하게 축소할 수 있다.

딥다이브

학습 데이터 문제와 해결

(1) 긍정셋 문제: 하나의 앵커에 여러 긍정셋이 존재하며 중요도가 다름 → 가중치 부여 필요

(2) 부정셋 문제: 범위가 무한함

앵커: "오늘은 매우 추운 날씨였습니다"

부정셋 예시:
  ├── "오늘은 매우 따뜻한 날씨입니다"  ← 미묘한 차이 (Hard Negative)
  └── "나는 오늘 밥을 먹었습니다"      ← 완전 무관 (Random Negative)

→ Random Negative만으로는 학습 비효율적

해결책:

기법 설명 효과
Hard Negative Mining 앵커와 관련된 미묘한 부정셋 의도 생성 구분력 향상
In-batch Negative 배치 내 긍정 외 모든 데이터를 부정으로 대규모 학습 가능

모델 아키텍처 진화

1세대: 벡터 손실학습 모델 (Word2Vec 등)
  │  한계: "후졌다" — 의미 표현력 부족
  ▼
2세대: 인코더 기반 (BERT, Sentence-BERT)
  │  특징: 양방향 어텐션, Mean Pooling으로 벡터 추출
  │  규모: M 단위 (110M ~ 700M 파라미터)
  ▼
3세대: 디코더 기반 (LLM 파인튜닝)
  │  특징: 인스트럭션 학습, 마지막 토큰(EOF)으로 벡터 추출
  │  규모: B 단위 (7B ~ 8B 파라미터)
  │  장점: 큰 청크 처리, 컨텍스트 지정 가능
  ▼
NVIDIA NV-Embed V2: LLP 레이어 추가
  │  EOF만 쓰는 한계 극복, 모든 토큰 정보 반영
  └─ MTEB 리더보드 상위권

인코더 vs 디코더의 벡터 추출

구분 인코더 (BERT) 디코더 (LLM)
어텐션 양방향 단방향 (왼→오)
벡터 추출 Mean Pooling (모든 토큰 평균) 마지막 토큰 (EOF)
Mean이 유의미한 이유 양방향이라 모든 토큰이 전체 맥락 반영 단방향이라 앞 토큰은 뒤를 모름 → Mean 무의미
크기 110M ~ 700M 7B ~ 8B
속도 빠름 느리지만 토큰 연속 출력 없어 LLM보다 빠름

인스트럭션 기반 임베딩

# 디코더 기반 모델은 프롬프트로 임베딩 컨텍스트 지정 가능
embedding = model.encode(
    "이 대화는 소설 관련입니다: 해리가 지팡이를 들었다",
    instruction="소설 및 문학 컨텍스트에서 임베딩"
)
# vs
embedding = model.encode(
    "이 대화는 비즈니스 관련입니다: 해리가 지팡이를 들었다",
    instruction="비즈니스 컨텍스트에서 임베딩"
)
# → 같은 텍스트라도 인스트럭션에 따라 다른 벡터 생성

MRL (Matryoshka Representation Learning)

학습 시: 다중 차원으로 동시 학습
  1000차원 손실 + 500차원 손실 + 200차원 손실 + 100차원 손실 + 50차원 손실
  → 앞쪽 차원에 중요 정보가 집중되도록 학습

사용 시: 벡터 앞부분만 잘라도 의미 보존
  [d₁, d₂, ..., d₂₅₆, d₂₅₇, ..., d₃₀₇₂]
   ├──── 앞 256차원만 사용 ────┤
   └─ 원본 대비 96% 성능 유지 (OpenAI text-embedding-3 기준)
       저장공간 92% 절약, 인덱싱 비용 대폭 절감

비유: 러시안 인형(마트료시카) — 까면 또 나오고, 까면 또 나옴

⚠️ 최신 업데이트: 임베딩 모델 현황 (2025-2026)

모델 기반 특징 MTEB
NV-Embed V2 (NVIDIA) Llama-3.1-8B + LLP 디코더 기반 최강, 다국어 약간 약함 69.32
Qwen3-Embedding (Alibaba) Qwen3 다국어 강점, 영어+다국어 MTEB 상위 상위권
text-embedding-3-large (OpenAI) 비공개 MRL 지원, 3072→256 축소 가능 -
nomic-embed-text-v1 (Nomic) 오픈소스 MRL 지원, 가벼움 -

⚠️ 최신 동향: MRL의 짧은 차원에서 성능 저하 문제를 보완하기 위해 Sparse Coding 기반 적응형 표현 연구가 진행 중이다. MRL은 표준으로 정착했으나, 극단적 축소(50차원 이하)에서는 대안 탐색이 필요하다.

실무 체크포인트

  • [ ] 임베딩 모델 선택 시 MTEB 리더보드를 참고하고 도메인에 맞는 모델을 벤치마크했는가?
  • [ ] MRL 지원 모델을 사용하여 인덱싱용 축소 벡터와 리랭킹용 원본 벡터를 분리 운영하는가?
  • [ ] 디코더 기반 모델의 인스트럭션 기능을 활용하여 도메인 컨텍스트를 지정했는가?

부록 A. 용어 사전

용어 정의
해석 엔트로피 데이터를 해석할 수 있는 방법의 다양성. 높을수록 비정형
느슨한 스키마 데이터 구조는 자유롭되 최소 검색 가능한 키만 정의하는 스키마
Sparse 벡터 일부 차원만 사용되는 벡터. 차원이 독립적 (예: BM25, TF-IDF)
Dense 벡터 모든 차원이 사용되는 벡터. 차원 간 상호작용 존재. 신경망으로만 생성
L2 노름 벡터의 크기/길이. √(Σvᵢ²)
L2 정규화 벡터를 단위 벡터(노름=1)로 변환. v / ‖v‖
코사인 유사도 두 벡터 간 각도의 유사성. 정규화 후 내적과 동일
Mean 벡터 여러 벡터의 각 차원별 산술 평균 벡터
국소적 선형성 고차원 공간도 국소 영역에서 선형 근사 가능한 성질
희석 (Dilution) 상반 벡터의 평균으로 속성이 제거되는 현상
pgvector PostgreSQL 벡터 검색 확장
하이브리드 검색 키워드(BM25) + 벡터 유사도를 결합한 검색 방식
HNSW 다계층 그래프 기반 벡터 인덱싱 알고리즘. 사실상 표준
NSW HNSW의 단일 레이어. 유클리드 거리 기반 그래프 탐색
IVF 대표 벡터 기반 역인덱스. 검색 범위 축소
PQ 고차원→저차원 양자화. 메모리 절약
청킹 (Chunking) 비정형 데이터를 독립 레코드 단위로 분리하는 작업
Hard Negative Mining 앵커와 미묘하게 다른 부정 데이터를 의도적으로 생성하는 기법
In-batch Negative 배치 내 긍정 외 모든 데이터를 부정으로 활용하는 학습 기법
MRL Matryoshka Representation Learning. 다중 차원 동시 학습으로 벡터 앞부분만 잘라도 의미 보존
LLP 레이어 NVIDIA가 디코더에 추가한 레이어. EOF 한계 극복, 모든 토큰 반영
인스트럭션 임베딩 프롬프트로 임베딩 컨텍스트를 지정하는 디코더 기반 기법

부록 B. 비교표 모음

B-1. 유사도 측정 방법

방법 수식 범위 데이터 편향 인덱싱 현재
코사인 유사도 A·B/(‖A‖·‖B‖) [-1, 1] 강건 간접 표준
유클리드 거리 √Σ(aᵢ-bᵢ)² [0, ∞) 취약 HNSW에 활용 인덱싱용
내적 Σaᵢbᵢ (-∞, ∞) 취약 정규화 전제 정규화 시 사용

B-2. 임베딩 모델 아키텍처

세대 기반 벡터 추출 규모 장점
1세대 Word2Vec 등 통계적 소형 빠름
2세대 BERT (인코더) Mean Pooling 110M~700M 양방향, 정확
3세대 LLM (디코더) EOF/LLP 7B~8B 인스트럭션, 큰 청크

B-3. 벡터 인덱스 비교

인덱스 원리 장점 단점
HNSW 다계층 그래프 높은 recall, 빠른 탐색, GPU 가속 가능 메모리 사용량 큼
IVF 대표 벡터 클러스터 검색 범위 축소 경계 벡터 누락 가능
PQ 차원 축소(양자화) 메모리 절약 recall 감소
IVF+PQ 클러스터 + 양자화 메모리+속도 절충 HNSW보다 일반적으로 열위

부록 C. 참고 링크

난이도
에피소드
질문
카드를 로딩 중...
답변

클릭하거나 Space를 눌러 뒤집기

0 / 0
학습 진도 0%
이동   Space 뒤집기   R 셔플